package com.sheng.leetcode.year2022.swordfingeroffer.day13;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2022/09/13
 *<p>
 * 剑指 Offer 58 - I. 翻转单词顺序<p>
 *<p>
 * 输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。<p>
 * 为简单起见，标点符号和普通字母一样处理。例如输入字符串"I am a student. "，则输出"student. a am I"。<p>
 *<p>
 * 示例 1：<p>
 * 输入: "the sky is blue"<p>
 * 输出:"blue is sky the"<p>
 *<p>
 * 示例 2：<p>
 * 输入: " hello world! "<p>
 * 输出:"world! hello"<p>
 * 解释: 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。<p>
 *<p>
 * 示例 3：<p>
 * 输入: "a good  example"<p>
 * 输出:"example good a"<p>
 * 解释: 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。<p>
 *<p>
 * 说明：<p>
 *<p>
 * 无空格字符构成一个单词。<p>
 * 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。<p>
 * 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。<p>
 * 注意：本题与主站 151 题相同：<a href="https://leetcode-cn.com/problems/reverse-words-in-a-string/">...</a><p>
 *<p>
 * 注意：此题对比原题有改动<p>
 *<p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof">...</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class Sword0058 {

    @Test
    public void test01() {
//        String s = "the sky is blue";
//        String s = " hello world! ";
        String s = "a good  example";
        System.out.println(new Solution58().reverseWords(s));
    }
}
class Solution58 {
    public String reverseWords(String s) {
        // 去除字符串的头尾结点，并通过正则表达式进行切割
        String[] split = s.trim().split("\\s+");
        StringBuilder str = new StringBuilder();
        for (int i = split.length - 1; i >= 0; i--) {
            str.append(split[i]);
            if (i != 0) {
                str.append(" ");
            }
        }
        return str.toString();
    }
}
